% coding: utf-8

\section{Desarrollo}

\subsection{Primera parte: Anunciación}

Lo primero que hicimos fue armar un paquete de anunciación con los siguientes datos:
		
\begin{itemize}
	\item type = 1. (Ya que es el establecido para la anunciación)
	\item id grupo = 57. (Nuestro número de PC en el laboratorio) 
	\item payload = 0. (Ya que es el establecido para la anunciación)
	\item checksum = ord(1) + ord(0). (De acuerdo al enunciado)
\end{itemize}	
De esta forma, nos queda el siguiente paquete:
\begin{center}
\paqueteEthernet{1}{57}{0}{97}
\end{center}

Luego lo enviamos con la instrucción \textit{sendp} con los siguientes datos:
\begin{itemize}
	\item direccion fuente (src) = 08:00:27:84:ce:8f  (nuestra direccion MAC calculada anteriormente)
	\item direccion destino (dst) = FF:FF:FF:FF:FF:FF (es decir, broadcast)
	\item type = 0xFFFF
\end{itemize}

Por \'ultimo, desde \textit{Wireshark} poniendo como filtro de destino nuestra dirección MAC obtuvimos el siguiente mensaje:
\begin{center}
\textbf{``Hola 57! Estoy escuchando en 08:00:27:cc:d3:76.''}
\end{center}

Por lo tanto el mensaje de autenticación llegó satisfactoriamente y además guardamos la dirección en la cual nos escucha el servidor. También hicimos algunas pruebas para ver cómo funciona el servidor, enviando paquetes incorrectos:
\begin{itemize}
\item En la primera prueba cambiamos la direcci\'on MAC fuente y conservamos el mismo id de grupo.
\item En la segunda prueba, cambiamos el id de grupo y conservamos la dirección MAC fuente. Para este caso realizamos la pregunta número 1. \\El paquete resultante es \paqueteEthernet{2}{58}{1}{99}.

\end{itemize}

Lo que podemos concluir de ambas pruebas es que el id del grupo no afecta al envío ni a la respuesta del paquete. Es decir que el servidor responde unicamente de acuerdo a la direcci\'on MAC que se encuentra en el mensaje enviado.


Para finalizar con esta subsección vamos a responder las preguntas que restan:

\begin{itemize}
\item \textit{¿Cómo se implementa broadcast por Ethernet?}


Broadcast por Ethernet se implementa utilizando como dirección destino 
\begin{center}
FF:FF:FF:FF:FF:FF
\end{center}

\item \textit{¿Cual es el payload efetivo que se coloca en el medio? ¿Cuanto mide? ¿Se envió lo que generamos?}


El payload efectivo que se coloca en el medio es 7c317c35377c307c39377c. Mide 11 bytes y se envió lo que generamos.

\item \textit{¿Qué ocurre con el valor del checksum para este tipo de mensajes?}


En este tipo de mensajes el checksum es siempre el mismo porque son mensajes de anunciación. Esto es así pues el payload y el tipo son siempre el mismo para todos los mensajes de anunciación, sin importar quién lo envíe, de acuerdo al protocolo detallado en el enunciado.		

\end{itemize}



\subsection{Segunda parte: preguntas y checksum}
La función que implementamos para calcular el checksum es la siguiente:\\
\\
def obtenerChecksum(tipo, payload): \\
\indent \indent camposConcatenados = str(tipo) $+$ str(payload) \\
\indent \indent checksum = 0 \\
\indent \indent for caracter in camposConcatenados: \\
\indent \indent \indent checksum = checksum $+$ ord(caracter) \\
\indent \indent return checksum \\

Las posibles combinaciones correctas posibles, de acuerdo al protocolo, de TIPO-PAYLOAD y sus checksum calculados son los siguientes:
\begin{itemize}
\item Tipo = 1, Payload = 0, Checksum = 97
\item Tipo = 2, Payload = 1, Checksum = 99
\item Tipo = 2, Payload = 2, Checksum = 100
\item Tipo = 2, Payload = 3, Checksum = 101
\end{itemize}


A continuación, responderemos las preguntas del enunciado:
\begin{itemize}

\item \textit{¿Qué sucede si enviamos un mensaje con un checksum erróneo?}


Para ver que sucede si enviamos un mensaje con checksum erróneo armamos un paquete con la primera pregunta y un checksum incorrecto
\begin{center}
\paqueteEthernet{2}{57}{1}{5}
\end{center}
			
La respuesta que obtuvimos fue: \textbf{``El checksum no es válido, lo siento.''}.\\ Por otro lado, con paquetes correctos realizamos las preguntas 2 y 3, para las cuales obtuvimos las siguientes respuestas respectivamente:

\begin{itemize}
\item \textbf{``Grupo 57, nivel físico, nivel de enlace y nivel de red.''}
\item \textbf{``Van a aprobar Iupi!.''}
\end{itemize}

\item \textit{¿Qué poder de detección de errores, medido en caracteres, piensan que tiene este algoritmo de checksum?}


Creemos que el poder de detección de errores de este algoritmo es de 1, ya que si por ejemplo tenemos Tipo = 2, Payload = 1 y Checksum = 100, puede que el Payload sea 2 (en este protocolo es el único mensaje válido con ese valor de checksum) o bien el checksum esté mal, en cuyo caso no existe error en los caracteres. Si el mensaje que se desea enviar es con Tipo = 2, Payload = 1 y Checksum = 99, pero al servidor le llegan: Tipo = 2, Payload = 2, Checksum = 100, lo indentificará como un mensaje correcto y responderá la pregunta número 2, es por eso que este algoritmo tiene una \textit{``distancia de Hamming medida en caracteres''} de 2, ya que si existen dos errores no los detecta, sólo detecta hasta un error en el mensaje.


\item \textit{¿Consideran que el checksum de este protocolo es suficientemente bueno?¿Por qué sí o por qué no?}


\ReView
Consideramos que no es lo suficientemente bueno, ya que teniendo en cuenta que sólo existen 4 casos posibles correctos, se podría utilizar una verificación más fuerte que sólo la suma de caracteres.


\end{itemize}

